package com.example.mq.mqserver.datacenter;

import com.example.mq.mqserver.core.MSGQueue;
import com.example.mq.mqserver.core.Message;

import java.io.IOException;
import java.util.LinkedList;

public interface IMessageFileManager {

    /**
     * 初始化
     */
    void init();
    /**
     * 创建队列以及相关文件
     * @param queueName 队列名
     * @throws IOException
     */
    void createQueueFiles(String queueName) throws IOException;

    /**
     * 删除队列以及相关文件
     * @param queueName 队列名
     * @throws IOException
     */
    void destroyFiles(String queueName) throws IOException;

    /**
     * 发送消息;将消息持久化到文件
     * @param queue 队列
     * @param message 消息体
     */
    void sendMessage(MSGQueue queue, Message message) throws IOException;

    /**
     * 删除消息；把消息从文件中删除（逻辑删除）
     * @param queue 队列
     * @param message 消息体
     */
    void deleteMessage(MSGQueue queue,Message message) throws IOException, ClassNotFoundException;

    /**
     * 从队列中获取所有消息
     * @param queueName 队列名
     * @return 消息集合
     */
    LinkedList<Message> loadAllMessageFromQueue(String queueName) throws IOException, ClassNotFoundException;

    /**
     * 垃圾回收
     * @param queue 队列
     */
    void queueGC(MSGQueue queue) throws IOException, ClassNotFoundException;

    /**
     * 判断队列是否触发GC
     * @param queueName 队列名
     * @return true:会触发<br/>false:不触发
     */
    boolean checkGC(String queueName);
}
